package com.baizhi.controller;

import com.baizhi.entities.Product;
import com.baizhi.vos.CollectionsVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

@Slf4j
@RestController
public class ProductController {
    @Value("${server.port}")
    private String port;


    @GetMapping("/products")
    public Map<String,Object> getProductPage(@RequestParam("size") int size,
                                             @RequestParam("page") int page,
                                             @RequestParam("categoryId") int categoryId){

        ArrayList<Product> products = new ArrayList<>();
        products.add(new Product(1,"裤子",99,new Date()));
        products.add(new Product(2,"裤子2",999,new Date()));
        products.add(new Product(3,"裤子3",9999,new Date()));

        HashMap<String, Object> map = new HashMap<>();
        map.put("rows",products);
        map.put("total",1000);
        return map;

    }


    @GetMapping("/product/{id}")
    public Product getProduct(@PathVariable("id") Integer id) {
        return new Product(id,"裤子",9999,new Date());
    }

    //接收数组类型的参数
    //springMVC的get方式不能直接接收集合类型参数，如果需要接收集合类型的参数的话，需要将集合封装到对象中，使用对象接收，或者使用post方式提交数据
    //VO（value object）：值对象，用来传递数据对象称之为值对象，dto：(data transfer object)数据传输对象
    /*@GetMapping("/test5")
    public String test(ArrayList<String> ids){
        ids.forEach(id -> log.info("id = {}",id));
        return "product ok,当前提供服务的接口为" + port;
    }*/
    @GetMapping("/test5")
    public String test(CollectionsVo vo){
        log.info("id = {}",vo.getIds().toString());
        return "product ok,当前提供服务的接口为" + port;
    }

    //接收数组类型的参数
    @GetMapping("/test4")
    public String test(@RequestParam("ids") String[] ids){

        for (String id : ids) {
            log.info("id = {}",id);
        }
        return "product ok,当前提供服务的接口为" + port;
    }


    //对象方式传参
    @PostMapping("/test3")
    public String test(@RequestBody Product product){
        log.info("name ={},price = {}",product.getName(),product.getPrice());
        return "调用商品服务成功";
    }

    //零散类型参数的接口 pathVariable方式传参
    @GetMapping("/test2/{name}")
    public String test(@PathVariable("name") String name){
        log.info("name ={}",name);
        return "调用商品服务成功";
    }

    //零散类型参数的接口 queryString方式传参
    @GetMapping("/test")
    public String test(@RequestParam("name") String name,@RequestParam("age") Integer age){
        log.info("name ={},age = {}",name,age);
        return "调用商品服务成功";
    }

    @GetMapping("/product")
    public String product() throws InterruptedException {
        log.info("进入商品服务。。。");
        //模拟超时
        Thread.sleep(2000);
        return "product ok,当前提供服务的接口为" + port;

    }


    @GetMapping("/list")
    public String list(){
        log.info("商品列表。。。");
        return "product ok,当前提供服务的接口为" + port;

    }


}
